Adding some more judges, here and there.
[and.git] / ICPC Live Archive / 3928 - Ballroom lights / help / gomox.ar-pap-2010-d9b17e5cb110 / tpd / doc / walk.tex
blobb45dbea3a01241d37b87f316d28c55976b834e9c
1 \newcommand{\Null}{\textsc{null}}
2 \section{3980 - Walk}
3 \textbf{Problema:}
4 Se tiene un conjunto de pol\'igonos (en $\Int^2$) que representan curvas de nivel.
5 No hay intersecciones entre segmentos de dos pol\'igonos distintos, ni entre dos
6 segmentos de un mismo pol\'igono. Dados dos puntos A y B (que no est\'an contenidos
7 en el borde de ninguna de las curvas de nivel), determinar la m\'inima altura que
8 se debe subir/bajar para llegar desde A hasta B, asumiendo que las \'areas entre
9 las curvas de nivel son \'optimas.
11 \subsection{Resoluci\'on}
13 \subsubsection{Modelo del problema}
14 Dado que no hay intersecciones entre dos segmentos de un pol\'igono,
15 todos los pol\'igonos tienen un ``interior'' y un ``exterior''
16 claramente definido.
18 Adem\'as, dado que no hay intersecciones entre dos pol\'igonos distintos,
19 se puede observar que hay un bosque de pol\'igonos impl\'icito en el problema.
20 Dados dos pol\'igonos $p$ y $q$, notamos $q \subset p$ si todos los v\'ertices
21 de $q$ est\'an en el interior de $p$. Los hijos de un pol\'igono $p$ se definen
22 de la siguiente manera:
24 $hijos(p) = \{q \tq q \subset p \,\land \not\exists p'.(q \subset p' \subset p) \}$
26 Es decir, los hijos de un pol\'igono son aquellos que est\'an inmediatamente
27 adentro. Las hojas son los pol\'igonos que no contienen a ning\'un otro pol\'igono.
28 En la implementaci\'on, se trabaja directamente con el bosque de pol\'igonos.
29 Para simplificar la demostraci\'on, se puede considerar que se tiene un \'arbol
30 de pol\'igonos, agregando como ra\'iz un pol\'igono suficientemente grande que contenga
31 a todos los dem\'as. (Esto no cambia la soluci\'on porque el camino que
32 requiere menos subidas/bajadas no atraviesa esta curva de nivel).
34 Dado un punto $x \in \Real^2$, notamos $x \in p$ sii $x$ est\'a
35 adentro del pol\'igono $p$.
36 El \'arbol se interpreta de la siguiente manera: el nodo del \'arbol
37 asociado al pol\'igono $p$ representa todos los puntos
38 $\{x \tq x \in p \,\land x \not\in hijos(p)\}$.
39 Un camino en el \'arbol representa un
40 camino entre puntos del plano (cocientando a los puntos mediante
41 la relaci\'on de equivalencia $x \equiv y$ sii $\forall p. (x \in p \iff y \in p)$).
42 Atravesar el eje que conecta al nodo $p$ con su hijo $q$
43 equivale a cruzar la curva de nivel representada por $q$.
45 Dado un punto $x$ se define $L(x)$ como el pol\'igono m\'as chico que
46 lo contiene:
48 $L(x) = p \text{ tal que } x \in p \,\land \not\exists q. (q < p \,\land\, x \in q)$
50 Dado un punto $x$, se puede ver que $x$ est\'a
51 adentro de todos los pol\'igonos en el camino que va desde la ra\'iz del
52 \'arbol hasta $L(x)$, y que adem\'as no est\'a contenido en ning\'un otro nodo.
54 Atravesar una curva de nivel siempre agrega un costo no negativo
55 de subida o de bajada. Por lo tanto, el \'unico camino
56 simple entre $L(A)$ y $L(B)$, que es m\'inimo en cantidad de ejes,
57 tambi\'en debe ser m\'inimo en cantidad de distancia subida/bajada.
59 \subsubsection{Cuestiones de implementaci\'on}
61 Para encontrar el camino simple entre $L(A)$ y $L(B)$ se usa
62 la siguiente propiedad de los pol\'igonos: $p \subset q \imp area(p) < area(q)$.
63 Esto es verdad porque no hay intersecciones de ning\'un tipo.
64 Por lo tanto, si se ordenan los pol\'igonos por \'area creciente
65 y se los recorre en ese orden, se visitan los nodos del \'arbol
66 de manera tal que, al momento de visitar el nodo $p$,
67 todos los nodos en $hijos(p)$ ya fueron visitados.
69 \begin{algorithm}[H]
70 \begin{algorithmic}
71 \caption{Encontrar el camino entre $L(A)$ y $L(B)$}
72 \STATE Ordenar los pol\'igonos por \'area.
73 \STATE $ramaA := []$
74 \STATE $ramaB := []$
75 \FOR{cada pol\'igono $p$, por \'area creciente}
76 \IF{$A \in p \land B \in p$}
77 \STATE terminar, devolver $(ramaA, ramaB)$
78 \ELSIF{$A \in p$}
79 \STATE agregar $p$ a $ramaA$
80 \ELSIF{$B \in p$}
81 \STATE agregar $p$ a $ramaB$
82 \ENDIF
83 \ENDFOR
84 \end{algorithmic}
85 \end{algorithm}
87 Sea $L(A,B)$ el pol\'igono m\'as chico que contiene a $A$ y a $B$, es decir:\\
88 $L(A,B) = p \text{ tal que } A \in p \,\land B \in p \,\land \not\exists q.(q < p \,\land A \in q \,\land B \in q)$
90 El algoritmo se basa en el hecho de que el camino simple desde $L(A)$
91 hasta $L(B)$ es el camino que va desde $L(A)$ hasta $L(A,B)$ m\'as el camino
92 que va desde $L(A,B)$ hasta $L(B)$.
93 El invariante es que, despu\'es de la iteraci\'on correspondiente al pol\'igono $p$,
94 $ramaA$ contiene los nodos del camino simple que va desde $L(A,B)$ hasta $L(A)$
95 y cuya \'area no exceda el \'area de $p$. (Y an\'alogamente para $B$).
97 En la implementaci\'on no se construye la lista, sino que directamente
98 se suman las distancias ascendidas o descendidas.
100 \subsubsection{Complejidad}
102 La entrada consta de $P$ pol\'igonos. Cada pol\'igono puede tener
103 una cantidad variable de v\'ertices. La cantidad total de v\'ertices
104 es $V$.
106 Primero se calcula el \'area de cada pol\'igono, usando el m\'etodo
107 usual (sumar los productos vectoriales y tomar m\'odulo).
108 Esto requiere calcular productos vectoriales usando cada
109 v\'ertice una cantidad constante de veces. Se hace para cada
110 v\'ertice de cada pol\'igono y por lo tanto la complejidad
111 temporal es $O(V)$.
113 Una vez calculadas las \'areas, ordenar los pol\'igonos por \'area
114 tiene complejidad $O(P \log P)$.
116 Para verificar si un punto $x$ est\'a contenido en un pol\'igono,
117 se elige un punto $y$ afuera del pol\'igono, y se determina si
118 la cantidad de veces que el segmento $\bar{xy}$ se
119 cruza con un segmento del pol\'igono es par o impar, usando
120 nuevamente productos vectoriales.
121 Esto requiere mirar cada punto del pol\'igono una cantidad
122 constante de veces. En peor caso, $L(A,B)$ es la ra\'iz
123 del \'arbol y se visitan todos los pol\'igonos una vez.
124 El costo es $O(P + V) \subseteq O(V)$.
126 La complejidad temporal de todo el algoritmo es entonces
127 $O(P \log P + V)$.
129 \subsection{Implementación}
131 \noindent
132 \ttfamily
133 \shorthandoff{"}\\
134 \hlstd{}\hlline{\ 1\ }\hldir{\#include\ $<$iostream$>$}\\
135 \hlline{\ 2\ }\hlstd{}\hldir{\#include\ $<$algorithm$>$}\\
136 \hlline{\ 3\ }\hlstd{}\hldir{\#include\ $<$vector$>$}\\
137 \hlline{\ 4\ }\hlstd{}\hldir{\#include\ $<$cassert$>$}\\
138 \hlline{\ 5\ }\hlstd{}\hldir{\#include\ $<$cstdio$>$}\\
139 \hlline{\ 6\ }\hlstd{}\\
140 \hlline{\ 7\ }\hlkwa{using\ namespace\ }\hlstd{std}\hlsym{;}\\
141 \hlline{\ 8\ }\hlstd{}\\
142 \hlline{\ 9\ }\hlkwc{typedef\ }\hlstd{pair}\hlsym{$<$}\hlstd{}\hlkwb{int}\hlstd{}\hlsym{,\ }\hlstd{}\hlkwb{int}\hlstd{}\hlsym{$>$\ }\hlstd{Coord}\hlsym{;}\\
143 \hlline{10\ }\hlstd{}\hlkwc{typedef\ }\hlstd{vector}\hlsym{$<$}\hlstd{Coord}\hlsym{$>$\ }\hlstd{Poly}\hlsym{;}\\
144 \hlline{11\ }\hlstd{}\\
145 \hlline{12\ }\hldir{\#define\ x\ first}\\
146 \hlline{13\ }\hlstd{}\hldir{\#define\ y\ second}\\
147 \hlline{14\ }\hlstd{}\\
148 \hlline{15\ }\hldir{\#define\ forsn(i,\ s,\ n)\ for\ (int\ i\ =\ (s);\ i\ $<$\ (n);\ i++)}\\
149 \hlline{16\ }\hlstd{}\hldir{\#define\ forn(i,\ n)\ forsn\ (i,\ 0,\ n)}\\
150 \hlline{17\ }\hlstd{}\\
151 \hlline{18\ }\hldir{\#define\ coord\textunderscore sub(c1,\ c2)\ Coord((c1).x\ {-}\ (c2).x,\ (c1).y\ {-}\ (c2).y)}\\
152 \hlline{19\ }\hlstd{}\\
153 \hlline{20\ }\hlkwb{bool\ }\hlstd{}\hlkwd{cross\textunderscore prod\textunderscore sign}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{const\ }\hlstd{Coord}\hlsym{\&\ }\hlstd{p}\hlsym{,\ }\hlstd{}\hlkwb{const\ }\hlstd{Coord}\hlsym{\&\ }\hlstd{q}\hlsym{)\ \{}\\
154 \hlline{21\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{const\ long\ long\ int\ }\hlstd{pxqy\ }\hlsym{=\ ((}\hlstd{}\hlkwb{long\ long\ int}\hlstd{}\hlsym{)}\hlstd{p}\hlsym{.}\hlstd{x}\hlsym{)\ {*}\ }\hlstd{q}\hlsym{.}\hlstd{y}\hlsym{;}\\
155 \hlline{22\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{const\ long\ long\ int\ }\hlstd{qxpy\ }\hlsym{=\ ((}\hlstd{}\hlkwb{long\ long\ int}\hlstd{}\hlsym{)}\hlstd{q}\hlsym{.}\hlstd{x}\hlsym{)\ {*}\ }\hlstd{p}\hlsym{.}\hlstd{y}\hlsym{;}\\
156 \hlline{23\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{return\ }\hlstd{pxqy\ }\hlsym{$>$=\ }\hlstd{qxpy}\hlsym{;}\\
157 \hlline{24\ }\hlstd{}\hlsym{\}}\\
158 \hlline{25\ }\hlstd{}\\
159 \hlline{26\ }\hlkwb{bool\ }\hlstd{}\hlkwd{se\textunderscore cruzan}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{const\ }\hlstd{Coord}\hlsym{\&\ }\hlstd{s0}\hlsym{,\ }\hlstd{}\hlkwb{const\ }\hlstd{Coord}\hlsym{\&\ }\hlstd{s1}\hlsym{,\ }\hlstd{}\hlkwb{const\ }\hlstd{Coord}\hlsym{\&\ }\hlstd{t0}\hlsym{,\ }\hlstd{}\hlkwb{const\ }\hlstd{Coord}\hlsym{\&\ }\hlstd{t1}\hlsym{)\ \{}\\
160 \hlline{27\ }\hlstd{}\hldir{\#define\ se\textunderscore cruzan1(a,\ b,\ c,\ d)\ (cross\textunderscore prod\textunderscore sign(coord\textunderscore sub(a,\ c),\ coord\textunderscore sub(d,\ c))\ !=\ cross\textunderscore prod\textunderscore sign(}\Righttorque\\
161 \hlline{28\ }\hldir{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hldir{coord\textunderscore sub(b,\ c),\ coord\textunderscore sub(d,\ c)))}\\
162 \hlline{29\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{return\ }\hlstd{}\hlkwd{se\textunderscore cruzan1}\hlstd{}\hlsym{(}\hlstd{s0}\hlsym{,\ }\hlstd{s1}\hlsym{,\ }\hlstd{t0}\hlsym{,\ }\hlstd{t1}\hlsym{)\ \&\&\ }\hlstd{}\hlkwd{se\textunderscore cruzan1}\hlstd{}\hlsym{(}\hlstd{t0}\hlsym{,\ }\hlstd{t1}\hlsym{,\ }\hlstd{s0}\hlsym{,\ }\hlstd{s1}\hlsym{);}\\
163 \hlline{30\ }\hlstd{}\hldir{\#undef\ se\textunderscore cruzan1}\\
164 \hlline{31\ }\hlstd{}\hlsym{\}}\\
165 \hlline{32\ }\hlstd{}\\
166 \hlline{33\ }\hlkwb{bool\ }\hlstd{}\hlkwd{esta\textunderscore adentro}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{const\ }\hlstd{Coord}\hlsym{\&\ }\hlstd{punto}\hlsym{,\ }\hlstd{}\hlkwb{const\ }\hlstd{Poly}\hlsym{\&\ }\hlstd{poly}\hlsym{)\ \{}\\
167 \hlline{34\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlslc{//\ buscar\ un\ punto\ afuera}\\
168 \hlline{35\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{maxx\ }\hlsym{=\ }\hlstd{punto}\hlsym{.}\hlstd{x}\hlsym{;}\\
169 \hlline{36\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{i}\hlsym{,\ (}\hlstd{}\hlkwb{int}\hlstd{}\hlsym{)}\hlstd{poly}\hlsym{.}\hlstd{}\hlkwd{size}\hlstd{}\hlsym{())\ \{}\\
170 \hlline{37\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{maxx\ }\hlsym{=\ }\hlstd{}\hlkwd{max}\hlstd{}\hlsym{(}\hlstd{maxx}\hlsym{,\ }\hlstd{poly}\hlsym{{[}}\hlstd{i}\hlsym{{]}.}\hlstd{x}\hlsym{);}\\
171 \hlline{38\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\\
172 \hlline{39\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{maxx}\hlsym{++;}\\
173 \hlline{40\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{const\ }\hlstd{Coord\ }\hlkwd{externo}\hlstd{}\hlsym{(}\hlstd{maxx}\hlsym{,\ }\hlstd{punto}\hlsym{.}\hlstd{y\ }\hlsym{+\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{);}\\
174 \hlline{41\ }\hlstd{\\
175 \hlline{42\ }}\hlstd{\ \ \ \ }\hlstd{}\hlslc{//\ ver\ si\ la\ cantidad\ de\ cruces\ es\ par\ o\ impar}\\
176 \hlline{43\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{const\ int\ }\hlstd{n\ }\hlsym{=\ }\hlstd{poly}\hlsym{.}\hlstd{}\hlkwd{size}\hlstd{}\hlsym{();}\\
177 \hlline{44\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{bool\ }\hlstd{adentro\ }\hlsym{=\ }\hlstd{}\hlkwa{false}\hlstd{}\hlsym{;}\\
178 \hlline{45\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{i}\hlsym{,\ }\hlstd{n}\hlsym{)\ }\hlstd{adentro\ \textasciicircum }\hlsym{=\ }\hlstd{}\hlkwd{se\textunderscore cruzan}\hlstd{}\hlsym{(}\hlstd{punto}\hlsym{,\ }\hlstd{externo}\hlsym{,\ }\hlstd{poly}\hlsym{{[}}\hlstd{i}\hlsym{{]},\ }\hlstd{poly}\hlsym{{[}(}\hlstd{i\ }\hlsym{+\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ \%\ }\hlstd{n}\hlsym{{]});}\\
179 \hlline{46\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{return\ }\hlstd{adentro}\hlsym{;}\\
180 \hlline{47\ }\hlstd{}\hlsym{\}}\\
181 \hlline{48\ }\hlstd{}\\
182 \hlline{49\ }\hlkwb{long\ long\ int\ }\hlstd{}\hlkwd{doble\textunderscore area}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{const\ }\hlstd{Poly}\hlsym{\&\ }\hlstd{poly}\hlsym{)\ \{}\\
183 \hlline{50\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{const\ int\ }\hlstd{n\ }\hlsym{=\ }\hlstd{poly}\hlsym{.}\hlstd{}\hlkwd{size}\hlstd{}\hlsym{();}\\
184 \hlline{51\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{long\ long\ int\ }\hlstd{s\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
185 \hlline{52\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{i}\hlsym{,\ }\hlstd{n}\hlsym{)\ \{}\\
186 \hlline{53\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwb{const\ int\ }\hlstd{j\ }\hlsym{=\ (}\hlstd{i\ }\hlsym{+\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ \%\ }\hlstd{n}\hlsym{;}\\
187 \hlline{54\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{s\ }\hlsym{+=\ ((}\hlstd{}\hlkwb{long\ long\ int}\hlstd{}\hlsym{)}\hlstd{poly}\hlsym{{[}}\hlstd{i}\hlsym{{]}.}\hlstd{x}\hlsym{)\ {*}\ }\hlstd{poly}\hlsym{{[}}\hlstd{j}\hlsym{{]}.}\hlstd{y\ }\hlsym{{-}\ ((}\hlstd{}\hlkwb{long\ long\ int}\hlstd{}\hlsym{)}\hlstd{poly}\hlsym{{[}}\hlstd{i}\hlsym{{]}.}\hlstd{y}\hlsym{)\ {*}\ }\hlstd{poly}\hlsym{{[}}\hlstd{j}\hlsym{{]}.}\hlstd{x}\hlsym{;}\\
188 \hlline{55\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\\
189 \hlline{56\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{return\ }\hlstd{s\ }\hlsym{$<$\ }\hlstd{}\hlnum{0\ }\hlstd{?\ }\hlsym{{-}}\hlstd{s\ }\hlsym{:\ }\hlstd{s}\hlsym{;}\\
190 \hlline{57\ }\hlstd{}\hlsym{\}}\\
191 \hlline{58\ }\hlstd{}\\
192 \hlline{59\ }\hlkwc{typedef\ }\hlstd{vector}\hlsym{$<$}\hlstd{}\hlkwb{int}\hlstd{}\hlsym{$>$\ }\hlstd{vint}\hlsym{;}\\
193 \hlline{60\ }\hlstd{}\hlkwc{typedef\ }\hlstd{vector}\hlsym{$<$}\hlstd{}\hlkwb{long\ long\ int}\hlstd{}\hlsym{$>$\ }\hlstd{vllint}\hlsym{;}\\
194 \hlline{61\ }\hlstd{\\
195 \hlline{62\ }vllint\ \textunderscore \textunderscore area2}\hlsym{;}\\
196 \hlline{63\ }\hlstd{}\hlkwb{bool\ }\hlstd{}\hlkwd{cmp\textunderscore area2}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{int\ }\hlstd{i}\hlsym{,\ }\hlstd{}\hlkwb{int\ }\hlstd{j}\hlsym{)\ \{}\\
197 \hlline{64\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{return\ }\hlstd{\textunderscore \textunderscore area2}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ $<$\ }\hlstd{\textunderscore \textunderscore area2}\hlsym{{[}}\hlstd{j}\hlsym{{]};}\\
198 \hlline{65\ }\hlstd{}\hlsym{\}}\\
199 \hlline{66\ }\hlstd{}\hlkwb{void\ }\hlstd{}\hlkwd{minwalk}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{const\ }\hlstd{vector}\hlsym{$<$}\hlstd{}\hlkwb{int}\hlstd{}\hlsym{$>$\&\ }\hlstd{heights}\hlsym{,\ }\hlstd{}\hlkwb{const\ }\hlstd{vector}\hlsym{$<$}\hlstd{Poly}\hlsym{$>$\&\ }\hlstd{curves}\hlsym{,\ }\hlstd{}\hlkwb{const\ }\hlstd{Coord}\hlsym{\&\ }\hlstd{pos\textunderscore alice}\hlsym{,\ }\hlstd{}\hlkwb{const\ }\Righttorque\\
200 \hlline{67\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{Coord}\hlsym{\&\ }\hlstd{pos\textunderscore bob}\hlsym{)\ \{}\\
201 \hlline{68\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{const\ int\ }\hlstd{n\ }\hlsym{=\ }\hlstd{curves}\hlsym{.}\hlstd{}\hlkwd{size}\hlstd{}\hlsym{();}\\
202 \hlline{69\ }\hlstd{\\
203 \hlline{70\ }}\hlstd{\ \ \ \ }\hlstd{}\hlslc{//\ ordenar\ los\ poligonos\ por\ area}\\
204 \hlline{71\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{\textunderscore \textunderscore area2\ }\hlsym{=\ }\hlstd{}\hlkwd{vllint}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{);}\\
205 \hlline{72\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{pi}\hlsym{,\ }\hlstd{n}\hlsym{)\ \{}\\
206 \hlline{73\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{\textunderscore \textunderscore area2}\hlsym{{[}}\hlstd{pi}\hlsym{{]}\ =\ }\hlstd{}\hlkwd{doble\textunderscore area}\hlstd{}\hlsym{(}\hlstd{curves}\hlsym{{[}}\hlstd{pi}\hlsym{{]});}\\
207 \hlline{74\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\\
208 \hlline{75\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{vint\ }\hlkwd{ind}\hlstd{}\hlsym{(}\hlstd{n}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{);}\\
209 \hlline{76\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{i}\hlsym{,\ }\hlstd{n}\hlsym{)\ }\hlstd{ind}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ =\ }\hlstd{i}\hlsym{;}\\
210 \hlline{77\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{sort}\hlstd{}\hlsym{(}\hlstd{ind}\hlsym{.}\hlstd{}\hlkwd{begin}\hlstd{}\hlsym{(),\ }\hlstd{ind}\hlsym{.}\hlstd{}\hlkwd{end}\hlstd{}\hlsym{(),\ }\hlstd{cmp\textunderscore area2}\hlsym{);}\\
211 \hlline{78\ }\hlstd{\\
212 \hlline{79\ }}\hlstd{\ \ \ \ }\hlstd{}\hlslc{//\ visitarlos\ en\ ese\ orden\ y\ calcular\ cuanto\ sube\ /\ baja}\\
213 \hlline{80\ }\hlstd{}\hldir{\#define\ up\textunderscore down(H1,\ H2)\ if\ (H1\ $<$\ H2)\ \{\ cost\textunderscore up\ +=\ H2\ {-}\ H1;\ \}\ else\ \{\ cost\textunderscore down\ +=\ H1\ {-}\ H2;\ \}}\\
214 \hlline{81\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{last\textunderscore height\textunderscore alice\ }\hlsym{=\ {-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{,\ }\hlstd{last\textunderscore height\textunderscore bob\ }\hlsym{=\ {-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{;}\\
215 \hlline{82\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{cost\textunderscore up\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{,\ }\hlstd{cost\textunderscore down\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
216 \hlline{83\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{i}\hlsym{,\ }\hlstd{n}\hlsym{)\ \{}\\
217 \hlline{84\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwb{const\ int\ }\hlstd{j\ }\hlsym{=\ }\hlstd{ind}\hlsym{{[}}\hlstd{i}\hlsym{{]};}\\
218 \hlline{85\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwb{const\ bool\ }\hlstd{contains\textunderscore alice\ }\hlsym{=\ }\hlstd{}\hlkwd{esta\textunderscore adentro}\hlstd{}\hlsym{(}\hlstd{pos\textunderscore alice}\hlsym{,\ }\hlstd{curves}\hlsym{{[}}\hlstd{j}\hlsym{{]});}\\
219 \hlline{86\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwb{const\ bool\ }\hlstd{contains\textunderscore bob\ }\hlsym{=\ }\hlstd{}\hlkwd{esta\textunderscore adentro}\hlstd{}\hlsym{(}\hlstd{pos\textunderscore bob}\hlsym{,\ }\hlstd{curves}\hlsym{{[}}\hlstd{j}\hlsym{{]});}\\
220 \hlline{87\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{contains\textunderscore alice\ }\hlsym{\&\&\ }\hlstd{contains\textunderscore bob}\hlsym{)\ \{}\\
221 \hlline{88\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{break}\hlstd{}\hlsym{;}\\
222 \hlline{89\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}\ }\hlstd{}\hlkwa{else\ if\ }\hlstd{}\hlsym{(}\hlstd{contains\textunderscore alice}\hlsym{)\ \{}\\
223 \hlline{90\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{last\textunderscore height\textunderscore alice\ }\hlsym{!=\ {-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ \{}\\
224 \hlline{91\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{up\textunderscore down}\hlstd{}\hlsym{(}\hlstd{last\textunderscore height\textunderscore alice}\hlsym{,\ }\hlstd{heights}\hlsym{{[}}\hlstd{j}\hlsym{{]});}\\
225 \hlline{92\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\\
226 \hlline{93\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{last\textunderscore height\textunderscore alice\ }\hlsym{=\ }\hlstd{heights}\hlsym{{[}}\hlstd{j}\hlsym{{]};}\\
227 \hlline{94\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}\ }\hlstd{}\hlkwa{else\ if\ }\hlstd{}\hlsym{(}\hlstd{contains\textunderscore bob}\hlsym{)\ \{}\\
228 \hlline{95\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{last\textunderscore height\textunderscore bob\ }\hlsym{!=\ {-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ \{}\\
229 \hlline{96\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{up\textunderscore down}\hlstd{}\hlsym{(}\hlstd{heights}\hlsym{{[}}\hlstd{j}\hlsym{{]},\ }\hlstd{last\textunderscore height\textunderscore bob}\hlsym{);}\\
230 \hlline{97\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\\
231 \hlline{98\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{last\textunderscore height\textunderscore bob\ }\hlsym{=\ }\hlstd{heights}\hlsym{{[}}\hlstd{j}\hlsym{{]};}\\
232 \hlline{99\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\\
233 \hlline{100\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\\
234 \hlline{101\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{if\ }\hlstd{}\hlsym{(}\hlstd{last\textunderscore height\textunderscore alice\ }\hlsym{!=\ {-}}\hlstd{}\hlnum{1\ }\hlstd{}\hlsym{\&\&\ }\hlstd{last\textunderscore height\textunderscore bob\ }\hlsym{!=\ {-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{)\ \{}\\
235 \hlline{102\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{up\textunderscore down}\hlstd{}\hlsym{(}\hlstd{last\textunderscore height\textunderscore alice}\hlsym{,\ }\hlstd{last\textunderscore height\textunderscore bob}\hlsym{);}\\
236 \hlline{103\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\\
237 \hlline{104\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{printf}\hlstd{}\hlsym{(}\hlstd{}\hlstr{"\%i\ \%i}\hlesc{$\backslash$n}\hlstr{"}\hlstd{}\hlsym{,\ }\hlstd{cost\textunderscore up}\hlsym{,\ }\hlstd{cost\textunderscore down}\hlsym{);}\\
238 \hlline{105\ }\hlstd{}\hlsym{\}}\\
239 \hlline{106\ }\hlstd{}\\
240 \hlline{107\ }\hlkwb{int\ }\hlstd{}\hlkwd{main}\hlstd{}\hlsym{()\ \{}\\
241 \hlline{108\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{const\ }\hlstd{Coord\ }\hlkwd{pos\textunderscore alice}\hlstd{}\hlsym{(}\hlstd{}\hlnum{0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{);}\\
242 \hlline{109\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{const\ }\hlstd{Coord\ }\hlkwd{pos\textunderscore bob}\hlstd{}\hlsym{(}\hlstd{}\hlnum{100000}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{);}\\
243 \hlline{110\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{ncases}\hlsym{;}\\
244 \hlline{111\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{scanf}\hlstd{}\hlsym{(}\hlstd{}\hlstr{"\%i}\hlesc{$\backslash$n}\hlstr{"}\hlstd{}\hlsym{,\ \&}\hlstd{ncases}\hlsym{);}\\
245 \hlline{112\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{ci}\hlsym{,\ }\hlstd{ncases}\hlsym{)\ \{}\\
246 \hlline{113\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{npolys}\hlsym{;}\\
247 \hlline{114\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{scanf}\hlstd{}\hlsym{(}\hlstd{}\hlstr{"\%i}\hlesc{$\backslash$n}\hlstr{"}\hlstd{}\hlsym{,\ \&}\hlstd{npolys}\hlsym{);}\\
248 \hlline{115\ }\hlstd{\\
249 \hlline{116\ }}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{vector}\hlsym{$<$}\hlstd{Poly}\hlsym{$>$\ }\hlstd{polys}\hlsym{;}\\
250 \hlline{117\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{vector}\hlsym{$<$}\hlstd{}\hlkwb{int}\hlstd{}\hlsym{$>$\ }\hlstd{heights}\hlsym{;}\\
251 \hlline{118\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{pi}\hlsym{,\ }\hlstd{npolys}\hlsym{)\ \{}\\
252 \hlline{119\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{curve\textunderscore height}\hlsym{,\ }\hlstd{nverts}\hlsym{;}\\
253 \hlline{120\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{scanf}\hlstd{}\hlsym{(}\hlstd{}\hlstr{"\%i\ \%i"}\hlstd{}\hlsym{,\ \&}\hlstd{curve\textunderscore height}\hlsym{,\ \&}\hlstd{nverts}\hlsym{);}\\
254 \hlline{121\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{polys}\hlsym{.}\hlstd{}\hlkwd{push\textunderscore back}\hlstd{}\hlsym{(}\hlstd{}\hlkwd{Poly}\hlstd{}\hlsym{());}\\
255 \hlline{122\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{forn\ }\hlstd{}\hlsym{(}\hlstd{vi}\hlsym{,\ }\hlstd{nverts}\hlsym{)\ \{}\\
256 \hlline{123\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{vert\textunderscore x}\hlsym{,\ }\hlstd{vert\textunderscore y}\hlsym{;}\\
257 \hlline{124\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{scanf}\hlstd{}\hlsym{(}\hlstd{}\hlstr{"\%i\ \%i"}\hlstd{}\hlsym{,\ \&}\hlstd{vert\textunderscore x}\hlsym{,\ \&}\hlstd{vert\textunderscore y}\hlsym{);}\\
258 \hlline{125\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{polys}\hlsym{{[}}\hlstd{pi}\hlsym{{]}.}\hlstd{}\hlkwd{push\textunderscore back}\hlstd{}\hlsym{(}\hlstd{}\hlkwd{Coord}\hlstd{}\hlsym{(}\hlstd{vert\textunderscore x}\hlsym{,\ }\hlstd{vert\textunderscore y}\hlsym{));}\\
259 \hlline{126\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\\
260 \hlline{127\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{heights}\hlsym{.}\hlstd{}\hlkwd{push\textunderscore back}\hlstd{}\hlsym{(}\hlstd{curve\textunderscore height}\hlsym{);}\\
261 \hlline{128\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\\
262 \hlline{129\ }\hlstd{\\
263 \hlline{130\ }}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{minwalk}\hlstd{}\hlsym{(}\hlstd{heights}\hlsym{,\ }\hlstd{polys}\hlsym{,\ }\hlstd{pos\textunderscore alice}\hlsym{,\ }\hlstd{pos\textunderscore bob}\hlsym{);}\\
264 \hlline{131\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\\
265 \hlline{132\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{return\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\\
266 \hlline{133\ }\hlstd{}\hlsym{\}}\\
267 \hlline{134\ }\hlstd{}\\
268 \mbox{}
269 \normalfont
270 \shorthandon{"}